import { ElMessage } from 'element-plus'
import { Response, defaultResponse} from '../types/common'

const API_BASE_URL = 'http://localhost:8082'


export const request = async <T>(url: string, options: RequestInit = {}): Promise<Response<T>> => {
  try {
    // 合并默认请求头
    const headers = {
      'Content-Type': 'application/json',
      'token': localStorage.getItem('token') || '',
      ...options.headers
    }

    // 构建完整URL
    const fullUrl = url.startsWith('http') ? url : `${API_BASE_URL}${url}`

    // 发送请求
    const response = await fetch(fullUrl, {
      ...options,
      headers
    })

    // 处理响应
    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`)
    }

    const data = await response.json()

    // 处理业务错误
    if (data.code !== 200) {
      ElMessage.error(data.message || '请求失败')
    }
    // 异常情况下，后端只处理code, message, 返回的data.data是null。避免空指针问题后面要对数据进行初始化
    return data
  } catch (error) {
    // 后端通过统一异常处理，正常情况下应该不会抛出异常，这里的异常可能是前端异常
    ElMessage.error('请求失败')
    return defaultResponse
  }
} 